﻿//
// Lightbox Gallery Module for DotNetNuke
// Project Contributors - Will Strohl (http://www.WillStrohl.com), Armand Datema (http://www.schwingsoft.com)
//
//Copyright (c) 2009-2013, Will Strohl
//All rights reserved.
//
//Redistribution and use in source and binary forms, with or without modification, are 
//permitted provided that the following conditions are met:
//
//Redistributions of source code must retain the above copyright notice, this list of 
//conditions and the following disclaimer.
//
//Redistributions in binary form must reproduce the above copyright notice, this list 
//of conditions and the following disclaimer in the documentation and/or other 
//materials provided with the distribution.
//
//Neither the name of Will Strohl, Armand Datema, Lightbox Gallery, nor the names of its contributors may be 
//used to endorse or promote products derived from this software without specific prior 
//written permission.
//
//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
//EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
//OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
//SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
//INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
//TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 
//BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
//CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
//ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 
//DAMAGE.
//

//INSTANT C# NOTE: Formerly VB project-level imports:
using System;
using System.Collections.Generic;
using System.Globalization;
using DotNetNuke.Services.Exceptions;

namespace WillStrohl.Modules.Lightbox
{

	public sealed class LightboxInfoCollection : List<LightboxInfo>
	{

#region  Constructors 

		public LightboxInfoCollection() : base()
		{
		}

		public LightboxInfoCollection(int capacity) : base(capacity)
		{
		}

		public LightboxInfoCollection(IEnumerable<LightboxInfo> collection) : base(collection)
		{
		}

#endregion

		public void Fill(System.Data.IDataReader dr)
		{
			try
			{
				while (dr.Read())
				{
					var obj = new LightboxInfo();
					if (dr[LightboxInfoMembers.LightboxIdField] != null)
					{
						obj.LightboxId = int.Parse(dr[LightboxInfoMembers.LightboxIdField].ToString(), NumberStyles.Integer);
					}
					if (dr[LightboxInfoMembers.ModuleIdField] != null)
					{
						obj.ModuleId = int.Parse(dr[LightboxInfoMembers.ModuleIdField].ToString(), NumberStyles.Integer);
					}
					if (dr[LightboxInfoMembers.GalleryNameField] != null)
					{
						obj.GalleryName = dr[LightboxInfoMembers.GalleryNameField].ToString();
					}
					if (dr[LightboxInfoMembers.GalleryDescriptionField] != null)
					{
						obj.GalleryDescription = dr[LightboxInfoMembers.GalleryDescriptionField].ToString();
					}
					if (dr[LightboxInfoMembers.GalleryFolderField] != null)
					{
						obj.GalleryFolder = dr[LightboxInfoMembers.GalleryFolderField].ToString();
					}
					if (dr[LightboxInfoMembers.DisplayOrderField] != null)
					{
						obj.DisplayOrder = int.Parse(dr[LightboxInfoMembers.DisplayOrderField].ToString(), NumberStyles.Integer);
					}

					if (dr[LightboxInfoMembers.LastUpdatedByField] != null)
					{
						try
						{
							obj.LastUpdatedBy = int.Parse(dr[LightboxInfoMembers.LastUpdatedByField].ToString(), NumberStyles.Integer);
						}
						catch
						{
							// do nothing
						}
					}

					if (dr[LightboxInfoMembers.LastUpdatedDateField] != null)
					{
						try
						{
							obj.LastUpdatedDate = DateTime.Parse(dr[LightboxInfoMembers.LastUpdatedDateField].ToString());
						}
						catch
						{
							obj.LastUpdatedDate = DateTime.Now;
						}
					}

					try
					{
						if (dr[LightboxInfoMembers.HideTitleDescriptionField] != null)
						{
							obj.HideTitleDescription = bool.Parse(dr[LightboxInfoMembers.HideTitleDescriptionField].ToString());
						}
					}
					catch
					{
						// do nothing - new field added, so a valid value might not exist immediately after upgrade
					}

                    try
                    {
                        if (!dr.IsDBNull(dr.GetOrdinal(LightboxInfoMembers.GroupIdField)))
                        {
                            try
                            {
                                obj.GroupId = int.Parse(dr[LightboxInfoMembers.GroupIdField].ToString(), NumberStyles.Integer);
                            }
                            catch
                            {
                                // do nothing
                            }
                        }
                    }
                    catch
                    {
                        // do nothing - new field added, so a valid value might not exist immediately after upgrade
                    }

				    this.Add(obj);
				}
			}
			catch (Exception ex)
			{
				Exceptions.LogException(ex);
			}
			finally
			{
				if (! dr.IsClosed)
				{
					dr.Close();
				}
			}
		}

	}

}